In a symmetric or private key encryption communication system, two devices in possession of a common secret or private key can perform both encryption and decryption using the secret key. A plaintext message may be encrypted using the secret key to produce encrypted plaintext or a cyphertext. The cyphertext may be decrypted using the secret key to re-produce the plaintext. Examples of such protocols date back to early history, with the classic Caesar cipher being an early instance of a secret key being used to secure communications. Symmetric encryption protocols typically take one of two forms. The stream cipher is a protocol where individual bits are encrypted one at a time. The Caesar cipher, and German Enigma machine are both instances of such protocols. A block cipher is a protocol where the data to be encrypted is first broken into a union of blocks of a fixed size, and then each of said blocks is encrypted by the protocol.